<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>

// function Foo() {
//     getName = function () { console.log(1) };
//     return this;
// }
// Foo.getName = function () { console.log(2)};
// Foo.prototype.getName = function () { console.log(3)};
// var getName = function () { console.log(4)};
// function getName() { console.log(5)}

// 上面代码与解析之后：
function Foo() {
    getName = function () { console.log(1) };// 修改全局变量的值
    return this;
}
// var getName 变量和函数重名时，函数优先
function getName() { console.log(5)}

// 逐行执行代码：
Foo.getName = function () { console.log(2)};// 给Foo函数添加静态方法
Foo.prototype.getName = function () { console.log(3)};// 给原型对象添加方法
getName = function () { console.log(4)};// 修改全局变量的值

// 请写出以下输出结果：
getName();// 4 调用全局的getName函数
Foo().getName();// 1 先执行Foo() => window，window.getName() 
new Foo.getName();// 2 new Foo优先级18，Foo.getName优先级19，new (Foo.getName)()
new Foo().getName();// 3 new Foo()优先级19，.getName优先级19，先执行new Foo() => Foo的实例.getName()
new new Foo().getName();// 3 new 无参数列表优先级18，new Foo()有参数列表优先级19，先执行new Foo() => new Foo的实例.getName()，先执行成员访问 new 原型的getName()
Foo.getName();// 2 调用Foo函数添加静态方法
getName();// 1 调用全局的getName


</script>
</body>
</html>